home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 2
/
CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso
/
magazine
/
amiga_e
/
eformat.e
< prev
next >
Wrap
Text File
|
1993-07-21
|
5KB
|
206 lines
/* Formatted with Eformat v1.4 from file "df1:eformat.e" */
/*
Eformat v1.4 - Formats E source code into a format I like.
Thanks to whoever wrote the stack code...
*/
MODULE 'dos/dos'
OPT OSVERSION=37
ENUM NOERROR,ERR_NOFILE,ERR_COFILE,ERR_NOMEM,ERR_UNKNOWN
OBJECT st_stackType
top, count
ENDOBJECT
DEF rdargs,srcfh
PROC main()
DEF myarg[2]:LIST,raw[300]:STRING,trim[300]:STRING,fw[30]:STRING,
sel_level=0,sel_tablevel=0,case_tablevel,sstr,tl,key,a,
addtab,us:st_stackType
tl:=0
IF (rdargs:=ReadArgs('Source/A',myarg,0))>0
IF FileLength(myarg[0])>0
srcfh:=Open(myarg[0],MODE_OLDFILE) ; st_init(us)
IF srcfh>0
WriteF('/* Formatted with Eformat v1.4 from file "\s" */\n',myarg[0])
ReadStr(srcfh,raw)
REPEAT
IF CtrlC()
WriteF('\n/* User Aborted Formatting! */\n')
getout(0)
ENDIF
sstr:=TrimStr(raw)
/* Copy trimmed string to work buffer... ('trim') */
StrCopy(trim,sstr,ALL)
/* Search for first word in line and isolate it... */
a:=InStr(trim,' ',0)
IF a>-1
StrCopy(fw,trim,a)
ELSE
StrCopy(fw,trim,ALL)
ENDIF
/* Pad it in case it's less than 4 characters... */
StrAdd(fw,' ',ALL)
key:=Long(fw) ; addtab:=FALSE
SELECT key
CASE "PROC"
IF findnonquoted(trim,' RETURN',0)=-1
addtab:=TRUE
ENDIF
tl:=0
CASE "ENDP"
tl:=0
CASE "IF "
IF findnonquoted(trim,' THEN',0)=-1
addtab:=TRUE
ENDIF
CASE "ELSE"
IF findnonquoted(trim,' THEN',0)=-1
tl-- ; addtab:=TRUE
ENDIF
CASE "ENDI"
tl--
CASE "SELE"
sel_level++ ; sel_tablevel:=tl ; case_tablevel:=tl+1
st_push(us,sel_tablevel) ; addtab:=TRUE
CASE "ENDS"
IF (sel_level--)>-1
sel_tablevel:=st_pop(us)
tl:=sel_tablevel ; case_tablevel:=tl-1
ENDIF
CASE "CASE"
tl:=case_tablevel ; addtab:=TRUE
CASE "DEFA"
tl:=case_tablevel ; addtab:=TRUE
CASE "REPE"
IF findnonquoted(trim,' UNTIL',0)=-1
addtab:=TRUE
ENDIF
CASE "UNTI"
tl--
CASE "LOOP"
IF findnonquoted(trim,' ENDLOOP',0)=-1
addtab:=TRUE
ENDIF
CASE "ENDL"
tl--
CASE "FOR "
IF findnonquoted(trim,' DO',0)=-1 AND findnonquoted(trim,'ENDFOR',0)=-1
addtab:=TRUE
ENDIF
CASE "ENDF"
tl--
CASE "WHIL"
IF findnonquoted(trim,' DO',0)=-1 AND findnonquoted(trim,'ENDWHILE',0)=-1
addtab:=TRUE
ENDIF
CASE "ENDW"
tl--
CASE "EXCE"
tl:=0 ; addtab:=TRUE
CASE "OBJE"
addtab:=TRUE
CASE "ENDO"
tl--
ENDSELECT
IF tl>0
FOR a:=1 TO tl
WriteF('\c',9)
ENDFOR
ELSE
IF tl<0
WriteF('/* Conversion Error! Tab level less than 0! */\n')
tl:=0
ENDIF
ENDIF
/* Addtab adds a tab AFTER the current line is displayed. */
IF addtab=TRUE
tl++
ENDIF
WriteF('\s\n',trim)
UNTIL ReadStr(srcfh,raw)=-1
getout(0)
ELSE
error(ERR_COFILE,0)
ENDIF
ELSE
error(ERR_NOFILE,0)
ENDIF
ELSE
WriteF('Incorrect argument format.\n')
ENDIF
getout(0)
ENDPROC
CHAR '$VER: Eformat Version 1.4 (c) 1994 Jason Maskell',0
/*
Quoted Keyword kludge for formatting stuff with, you guessed it,
quoted keywords. Like this source, for example.
*/
PROC findnonquoted(source:PTR TO CHAR,target,offs)
DEF a
IF (a:=InStr(source,target,offs))>-1
IF source[a+StrLen(target)]="'"
a:=-1
ENDIF
ENDIF
ENDPROC a
PROC st_init (theStack : PTR TO st_stackType)
/* Simply declare the stack variable as st_stackType. The status of the */
/* stack can be checked by testing stackname.count. */
theStack.top := NIL
theStack.count := 0
ENDPROC
PROC st_push (theStack : PTR TO st_stackType, addr)
DEF newList, tempList
newList := List (1)
ListCopy (newList, [addr], ALL)
tempList := Link (newList, theStack.top)
theStack.top := tempList
theStack.count := theStack.count + 1
ENDPROC
PROC st_pop (theStack : PTR TO st_stackType)
DEF list, addr = NIL
IF theStack.count
list := theStack.top
addr := ^list
theStack.top := Next (list)
theStack.count := theStack.count - 1
ENDIF
ENDPROC addr
PROC error(err,str)
DEF work[256]:STRING
SELECT err
CASE ERR_NOFILE
StringF(work,'Couldn''t find source E source file.\n')
CASE ERR_COFILE
StringF(work,'Couldn''t open file. DOS Error \d\n',IoErr())
CASE ERR_NOMEM
StringF(work,'Unable to allocate memory.\n')
CASE ERR_UNKNOWN
StringF(work,'Unknown error code! \d',err)
ENDSELECT
request('Eformat Error',work,'Ok',0)
getout(11)
ENDPROC
PROC request(title,body,gadgets,args)
ENDPROC EasyRequestArgs(0,[20,0,title,body,gadgets],0,args)
PROC getout(retcode)
IF srcfh
Close(srcfh)
ENDIF
FreeArgs(rdargs)
CleanUp(retcode)
ENDPROC